package cn.iocoder.yudao.framework.common.util.collection;

import cn.iocoder.yudao.framework.common.pojo.TreeNode;

import java.util.*;

public class TreeUtil {

    /**
     * n个根节点 遍历为n个树结构
     * @deprecated 节点找不到父节点，那么这个节点就是根节点
     * @param nodes
     * @return
     */
    public static List<TreeNode> buildTree(List<TreeNode> nodes) {
        if (nodes == null || nodes.isEmpty()) {
            return new ArrayList<>();
        }

        Map<Integer, TreeNode> nodeMap = new HashMap<>();
        List<TreeNode> roots = new ArrayList<>();

        // 首先，将所有的节点放入map中，方便后续查找
        for (TreeNode node : nodes) {
            nodeMap.put(node.id, node);
        }

        // 然后，为每个节点添加其子节点
        for (TreeNode node : nodes) {
            TreeNode parent = nodeMap.get(node.parentId);
            if (parent != null) {
                parent.children.add(node);
            } else {
                // 如果找不到父节点，那么这个节点就是根节点
                roots.add(node);
            }
        }

        return roots;  // 返回所有的根节点
    }
    public static void main(String[] args) {
        List<TreeNode> nodes = Arrays.asList(
                new TreeNode(1, 0, "root1"),
                new TreeNode(2, 0, "root2"),
                new TreeNode(3, 1, "child1"),
                new TreeNode(4, 2, "child2"),
                new TreeNode(5, 3, "grandchild1")
        );

        List<TreeNode> tree = TreeUtil.buildTree(nodes);
        System.out.println(tree);
        // 打印或处理生成的树结构...
    }
}
